const App = getApp();
const MYJS = require('../../utils/myinit.js');
// 添加到购物车的逻辑
// 记录规格的数组
let goodsSpecArr = [];
const util = require('../../utils/util.js');
// 富文本插件
const wxParse = require("../../wxParse/wxParse.js");
Page({
  data: {
    goods_num: 1, // 商品数量
    goods_sku_id: 0, // 规格id
    goodsMultiSpec: {}, // 多规格信息

    ertypeDiv:false,
    nowtypeid:0,
    nowtypetwoid:0,
    // 一级分类：指针，此指针会根据nowtypeid所变化
    curNav: true, //对应nowtypeid
    curIndex: 0,
    // 二级分类：指针，此指针会根据nowtypeid所变化
    curNav2: true,  //对应nowtypetwoid
    curIndex2: -1, //包含全部按钮，下标从-1开始计算，可以去掉，未用到

    // 搜索框样式
    searchColor: "rgba(0,0,0,0.4)",
    searchSize: "15",
    searchName: "搜索礼品",

    // 列表高度
    scrollHeight: 0,

    // 分类列表
    list: [],

    // show
    notcont: false,

    // 单个分类下的商品列表参数
    noGoodIsShow:false, //是否存在列表数据提示框显示或隐藏
    showView:true, //列表显示方式，大图和列表显示
    sortType: 'all', // 排序类型
    sortPrice: false, // 价格从低到高
    option: {}, // 当前页面参数
    goodsList: {}, // 商品列表数据
    no_more: false, // 没有更多数据
    isLoading: true, // 是否正在加载中
    page: 1, // 当前页码
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(e) {
    var _nowtypeid = e.goodtype!=undefined ? e.goodtype : 0
    // _nowtypeid = 10005  //测试一级分类
    var _nowtypetwoid = e.goodtype2!=undefined ? e.goodtype2 : 0
    // _nowtypetwoid = 10014 //测试二级分类
    this.setData({nowtypeid:_nowtypeid, nowtypetwoid:_nowtypetwoid})
    
    let _this = this;
    // 设置分类列表高度
    _this.setListHeight();
    // 获取分类列表
    _this.getCategoryList();
    // 设置navbar标题、颜色
    App.setNavigationBar();
  },

  /**
   * 设置分类列表高度
   */
  setListHeight() {
    //记得设置后台分类为二次展示菜单，否则无法显示内容
    let _this = this;
    var res = wx.getWindowInfo();
    var hhh = res.windowHeight - 40
    _this.setData({scrollHeight:hhh});
  },

  /**
   * 获取分类列表
   */
  getCategoryList() {
    let _this = this;
    App._get('category/index', {}, result => {
      let data = result.data;
      //如果有一级分类值，有传值就用传值，没有就默认第一个
      var _curNav = data.list.length==0 ? true : (_this.data.nowtypeid>0 ? _this.data.nowtypeid : data.list[0].category_id)
      var _curIndex = MYJS.getListCnt(data.list, "category_id", _curNav)
      //如果有二级分类之，有传值就用传值，没有就默认全部
      var _curNav2 = data.list.length==0 ? true : (data.list[_curIndex].child==undefined ? true : _this.data.nowtypetwoid)
      var _curIndex2 = data.list.length==0 ? -1 : (data.list[_curIndex].child==undefined ? -1 : (_this.data.nowtypetwoid==0 ? -1 : MYJS.getListCnt(data.list[_curIndex].child, "category_id", _curNav2)))
    
      _this.setData({
        list: data.list,
        templet: data.templet,
        curNav: _curNav,
        curIndex: _curIndex,
        nowtypeid:_curNav,
        curNav2: _curNav2,
        curIndex2: _curIndex2,
        notcont: !data.list.length
      });
      _this.getGoodList()
    });
  },
  /**
   * 一级分类：选中分类
   */
  selectNav(e) {
    let _this = this;
    var _curNav = e.target.dataset.id
    var _curIndex = parseInt(e.target.dataset.index)
    var _curNav2 = _this.data.list.length==0 ? true : (_this.data.list[_curIndex].child==undefined ? true : _this.data.nowtypetwoid)
    var _curIndex2 = _this.data.list.length==0 ? -1 : (_this.data.list[_curIndex].child==undefined ? -1 : (_this.data.nowtypetwoid==0 ? -1 : MYJS.getListCnt(_this.data.list[_curIndex].child, "category_id", _curNav2)))
    
    // 如果切换了1级分类，则默认选择全部 开始----------------------------------
    var lastOneId = this.data.nowtypeid;
    var newTwoID = _curNav2==true ? 0 : _curNav2
    if(lastOneId != _curNav){
      newTwoID = 0;
      _curNav2 = 0;
    }
    // 如果切换了1级分类，则默认选择全部 结束----------------------------------

    _this.setData({
      curNav: _curNav,
      curIndex: _curIndex,
      nowtypeid:_curNav,

      curNav2: _curNav2,
      curIndex2: _curIndex2,
      nowtypetwoid: newTwoID,

      ertypeDiv:false,
      scrollTop: 0
    });
    
    _this.getGoodList()
  },
  //点击选择二级分类
  selectNavTwo(e){
    const _this = this;
    var _curNav2 = e.target.dataset.typetwoid
    var _curIndex2 = _this.data.list.length==0 ? -1 : (_this.data.list[_this.data.curIndex].child==undefined ? -1 : (_this.data.nowtypetwoid==0 ? -1 : MYJS.getListCnt(_this.data.list[_this.data.curIndex].child, "category_id", _curNav2)))

    _this.setData({
      curNav2: _curNav2,
      curIndex2: _curIndex2,
      nowtypetwoid:_curNav2==true ? 0 : _curNav2,
      ertypeDiv:false,
      scrollTop: 0
    });
    _this.getGoodList()
  },
  getGoodList(){
    const _this = this;
    console.log('一级分类指针：',_this.data.curNav,_this.data.curIndex,"二级分类指针：",_this.data.curNav2,_this.data.curIndex2,"***********两种typeid",_this.data.nowtypeid,_this.data.nowtypetwoid)
    this.getGoodsListFun()
  },
  onShow(){
    App.pageOnLoad(this);
    //设置tabbar购物车总数量
    App.setBuyCarNumFun()
  },
  /**
   * 设置分享内容
   */
  onShareAppMessage() {
    const _this = this;
    return {
      title: _this.data.templet.share_title,
      path: '/pages/category/index?' + App.getShareUrlParams()
    };
  },
  /**
   * 分享到朋友圈
   * 本接口为 Beta 版本，暂只在 Android 平台支持，详见分享到朋友圈 (Beta)
   * https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share-timeline.html
   */
  onShareTimeline() {
    const _this = this;
    return {
      title: _this.data.templet.share_title,
      path: '/pages/category/index?' + App.getShareUrlParams()
    };
  },
  onPullDownRefresh() {
    wx.stopPullDownRefresh()//结束刷新
  },
  // 打开关闭二级分类框
  openTwoType(){
    let nowB = this.data.ertypeDiv
    this.setData({ertypeDiv:!nowB})
  },
  // 请求该分类下的商品列表
  getGoodsListFun(isPage, page) {
    // page不传递，则默认第一页
    let _this = this;
    let nowtypeid = _this.data.nowtypetwoid>0 ? _this.data.nowtypetwoid : _this.data.nowtypeid
    App._get('goods/lists', {
      page: page || 1,
      sortType: this.data.sortType,
      api:"phone",
      sortPrice: this.data.sortPrice ? 1 : 0,
      category_id: nowtypeid,
      search: this.data.option.search || '',
    }, result => {
      let resList = result.data.list,
        dataList = _this.data.goodsList;
      if (isPage == true) {
        _this.setData({
          'goodsList.data': dataList.data.concat(resList.data),
          isLoading: false,
          no_more:false,
          noGoodIsShow:false
        });
      } else {
        _this.setData({
          goodsList: resList,
          isLoading: false,
          no_more:false,
          noGoodIsShow:false
        });
      }
      if(_this.data.page==1 && _this.data.goodsList.data.length==0){
        this.setData({noGoodIsShow: true});
      }
    });
  },
  // 下拉加载数据
  bindDownLoad() {
    // 已经是最后一页
    if (this.data.page >= this.data.goodsList.last_page) {
      this.setData({
        no_more: true
      });
      return false;
    }
    // 加载下一页列表
    this.getGoodsListFun(true, ++this.data.page);
  },

  // 加入购物车的逻辑
  //商品组件中的 组件中点击的事件 传递到顶层
  clickIncar(e){
    let _this = this;
    let goodid = e.currentTarget.dataset.goodid
    this.setData({showBottomPopup:true,goods_id:goodid,goods_num:1,goods_sku_id:0,goodsMultiSpec:{}})
    // 请求单条商品信息
    App._get('goods/detail', {
      goods_id: goodid
    }, (result) => {
      // 初始化商品详情数据
      let data = _this._initGoodsDetailData(result.data);
      // console.log(111,data.cart_total_num)
      // 设置tabbar购物车总数量
      App.setBuyCarNum(result.data.cart_total_num)
      _this.setData(data);
    });
  },
  //关闭顶层弹出层
  onClosePopup(){
    this.setData({showBottomPopup:false})
  },
  _initGoodsDetailData(data) {
    let _this = this;
    // 商品详情
    let goodsDetail = data.detail;
    // 富文本转码
    if (goodsDetail.content.length > 0) {
      wxParse.wxParse('content', 'html', goodsDetail.content, _this, 0);
    }
    // 商品价格/划线价/库存
    data.goods_sku_id = goodsDetail.goods_sku.spec_sku_id;
    data.goods_price = goodsDetail.goods_sku.goods_price;
    data.line_price = goodsDetail.goods_sku.line_price;
    data.stock_num = goodsDetail.goods_sku.stock_num;
    // 商品封面图(确认弹窗)
    data.skuCoverImage = goodsDetail.goods_image;
    // 多规格商品封面图(确认弹窗)
    if (goodsDetail.spec_type == 20 && goodsDetail.goods_sku['image']) {
      data.skuCoverImage = goodsDetail.goods_sku['image']['file_path'];
    }
    // 初始化商品多规格
    if (goodsDetail.spec_type == 20) {
      data.goodsMultiSpec = _this._initManySpecData(goodsDetail.goods_multi_spec);
    }
    return data;
  },
  //初始化多规格商品
  _initManySpecData(data) {
    goodsSpecArr = [];
    for (let i in data.spec_attr) {
      for (let j in data.spec_attr[i].spec_items) {
        if (j < 1) {
          data.spec_attr[i].spec_items[0].checked = true;
          goodsSpecArr[i] = data.spec_attr[i].spec_items[0].item_id;
        }
      }
    }
    return data;
  },
  //点击切换不同商品规格
  onSwitchSpec(e) {
    let _this = this,
      attrIdx = e.currentTarget.dataset.attrIdx,
      itemIdx = e.currentTarget.dataset.itemIdx,
      goodsMultiSpec = _this.data.goodsMultiSpec;
    for (let i in goodsMultiSpec.spec_attr) {
      for (let j in goodsMultiSpec.spec_attr[i].spec_items) {
        if (attrIdx == i) {
          goodsMultiSpec.spec_attr[i].spec_items[j].checked = false;
          if (itemIdx == j) {
            goodsMultiSpec.spec_attr[i].spec_items[itemIdx].checked = true;
            goodsSpecArr[i] = goodsMultiSpec.spec_attr[i].spec_items[itemIdx].item_id;
          }
        }
      }
    }
    _this.setData({
      goodsMultiSpec
    });
    // 更新商品规格信息
    _this._updateSpecGoods();
  },
  //更新商品信息
  _updateSpecGoods() {
    let _this = this,
      specSkuId = goodsSpecArr.join('_');
    // 查找skuItem
    let spec_list = _this.data.goodsMultiSpec.spec_list,
      skuItem = spec_list.find((val) => {
        return val.spec_sku_id == specSkuId;
      });
    // 记录goods_sku_id
    // 更新商品价格、划线价、库存
    if (typeof skuItem === 'object') {
      _this.setData({
        goods_sku_id: skuItem.spec_sku_id,
        goods_price: skuItem.form.goods_price,
        line_price: skuItem.form.line_price,
        stock_num: skuItem.form.stock_num,
        skuCoverImage: skuItem.form.image_id > 0 ? skuItem.form.image_path : _this.data.detail.goods_image
      });
    }
  },
  //增加商品数量
  onIncGoodsNumber(e) {
    let _this = this;
    App.saveFormId(e.detail.formId);
    _this.setData({
      goods_num: ++_this.data.goods_num
    })
  },
  //减少商品数量
  onDecGoodsNumber(e) {
    let _this = this;
    App.saveFormId(e.detail.formId);
    if (_this.data.goods_num > 1) {
      _this.setData({
        goods_num: --_this.data.goods_num
      });
    }
  },
  //自定义输入商品数量
  onInputGoodsNum(e) {
    let _this = this,
      iptValue = e.detail.value;
    if (!util.isPositiveInteger(iptValue) && iptValue !== '') {
      iptValue = 1;
    }
    _this.setData({
      goods_num: iptValue
    });
  },
  //加入购物车或立即购买
  onConfirmSubmit(e) {
    let _this = this,
      submitType = e.currentTarget.dataset.type;
    if (submitType === 'buyNow') {
      // 立即购买
      wx.navigateTo({
        url: '../flow/checkout?' + util.urlEncode({
          order_type: 'buyNow',
          goods_id: _this.data.goods_id,
          goods_num: _this.data.goods_num,
          goods_sku_id: _this.data.goods_sku_id,
        }),
        success() {
          // 关闭弹窗
          _this.onClosePopup()
        }
      });
      this.onClosePopup()
    } else if (submitType === 'addCart') {
      // 加入购物车
      App._post_form('cart/add', {
        goods_id: _this.data.goods_id,
        goods_num: _this.data.goods_num,
        goods_sku_id: _this.data.goods_sku_id,
      }, (result) => {
        App.showSuccess(result.msg);
        // 其中返回购物车总数量cart_total_num
        _this.setData(result.data);
        // 关闭购物车
        _this.onClosePopup();
        // console.log(222,result.data.cart_total_num)
        // 设置tabbar购物车总数量缓存
        App.setBuyCarNum(result.data.cart_total_num)
        //设置tabbar购物车总数量
        App.setBuyCarNumFun()
      });
    }
  },
  //预览商品缩略图
  onPreviewSkuImage(e) {
    let _this = this;
    let img = e.currentTarget.dataset.img;
    wx.previewImage({
      current: img,
      urls: [img]
    })
  },
});